// 泛型就是 在定义接口或者函数的时候不指定类型 而是在定义数据的时候才指定类型

let arr: Array<number | string> = [1, 2, 3, "aaa"]

// interface 是接口 的意思 用来描述对象数组的结构形状的

// 在接口中使用泛型的语法是在接口后面加上<>,泛型一般用大写字母表示，可以理解为 在定义接口的时候指定了两个形参，在真正用的时候才传两个实参
interface myObj<U, T> {
    name: U,
    age: T
}
let obj: myObj<string, number> = {
    name: "xiaom",
    age: 18
}

let obj1: myObj<string, boolean> = {
    name: "xiaol",
    age: true
}

interface Iarray<T> {
    [props: number]: T
}
let arr1: Iarray<number | string> = [1, 2, 3, 4, "123"]


// 泛型可以用来定义函数 在用的时候才指定具体类型
function fun1<T, U>(x: T, y: U) {
    return x
}
fun1<number, string>(10, "aaaa")
